package com.yunliuchain.examination.common.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by Administrator on 2016/10/29.
 */

public class RegexUtils {
    public  boolean startCheck(String reg,String string)
    {
        boolean tem=false;

        Pattern pattern = Pattern.compile(reg);
        Matcher matcher=pattern.matcher(string);

        tem=matcher.matches();
        return tem;
    }


    /**
     * 检验整数,适用于正整数、负整数、0，负整数不能以-0开头,
     * 正整数不能以0开头
     *
     * */
    public boolean checkNr(String nr)
    {
        String reg="^(-?)[1-9]+\\d*|0";
        return startCheck(reg,nr);
    }

    /**
     * 手机号码验证,11位，不知道详细的手机号码段，只是验证开头必须是1和位数
     * */
    public static boolean checkPhone(String cellPhoneNr)
    {
        return cellPhoneNr.matches("^[1][\\d]{10}");
    }

    public static boolean checkPassword(String str){
        return str.matches("^.*[a-zA-Z]+.*$")
                && str.matches("^.*[0-9]+.*$")
                && str.matches("^.*[/^/$/.//,;:'!@#%&/*/|/?/+/(/)/[/]/{/}]+.*$")
                &&str.length() >= 8;
    }

    /**
     * 检验空白符
     * */
    public boolean checkWhiteLine(String line)
    {
        String regex="(\\s|\\t|\\r)+";

        return startCheck(regex,line);
    }


    /**
     * 检查EMAIL地址
     * 用户名和网站名称必须>=1位字符
     * 地址结尾必须是以com|cn|com|cn|net|org|gov|gov.cn|edu|edu.cn结尾
     * */
    public boolean checkEmailWithSuffix(String email)
    {
        String regex="\\w+\\@\\w+\\.(com|cn|com.cn|net|org|gov|gov.cn|edu|edu.cn)";

        return startCheck(regex,email);
    }


    /**
     * 检查EMAIL地址
     * 用户名和网站名称必须>=1位字符
     * 地址结尾必须是2位以上，如：cn,test,com,info
     * */
    public boolean checkEmail(String email)
    {
        String regex="\\w+\\@\\w+\\.\\w{2,}";

        return startCheck(regex,email);
    }

    /**
     * 检查邮政编码(中国),6位，第一位必须是非0开头，其他5位数字为0-9
     * */
    public boolean checkPostcode(String postCode)
    {
        String regex="^[1-9]\\d{5}";
        return startCheck(regex,postCode);
    }

    /**
     * 检验用户名
     * 取值范围为a-z,A-Z,0-9,"_",汉字，不能以"_"结尾
     * 用户名有最小长度和最大长度限制，比如用户名必须是4-20位
     * */
    public boolean checkUsername(String username,int min,int max)
    {
        String regex="[\\w\u4e00-\u9fa5]{"+min+","+max+"}(?<!_)";
        return startCheck(regex,username);
    }
    /**
     * 检验用户名
     * 取值范围为a-z,A-Z,0-9,"_",汉字，不能以"_"结尾
     * 有最小位数限制的用户名，比如：用户名最少为4位字符
     * */
    public boolean checkUsername(String username,int min)
    {
        //[\\w\u4e00-\u9fa5]{2,}?
        String regex="[\\w\u4e00-\u9fa5]{"+min+",}(?<!_)";

        return startCheck(regex,username);
    }

    /**
     * 检验用户名
     * 取值范围为a-z,A-Z,0-9,"_",汉字
     * 最少一位字符，最大字符位数无限制，不能以"_"结尾
     * */
    public boolean checkUsername(String username)
    {
        String regex="[\\w\u4e00-\u9fa5]+(?<!_)";
        return startCheck(regex,username);
    }

    /**
     *  查看IP地址是否合法
     * */
    public boolean checkIP(String ipAddress)
    {
        String regex="(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\." +
                "(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\." +
                "(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\." +
                "(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])";

        return startCheck(regex,ipAddress);
    }

    /**
     * 验证国内电话号码
     * 格式：010-67676767，区号长度3-4位，必须以"0"开头，号码是7-8位
     * */
    public boolean checkPhoneNr(String phoneNr)
    {
        String regex="^[0]\\d{2,3}\\-\\d{7,8}";

        return startCheck(regex,phoneNr);
    }

    /**
     * 验证国内电话号码
     * 格式：6767676, 号码位数必须是7-8位,头一位不能是"0"
     * */
    public boolean checkPhoneNrWithoutCode(String phoneNr)
    {
        String reg="^[1-9]\\d{6,7}";

        return startCheck(reg,phoneNr);
    }

    /**
     * 验证国内电话号码
     * 格式：0106767676，共11位或者12位，必须是0开头
     * */
    public boolean checkPhoneNrWithoutLine(String phoneNr)
    {
        String reg="^[0]\\d{10,11}";

        return startCheck(reg,phoneNr);
    }

    /**
     * 验证国内身份证号码：15或18位，由数字组成，不能以0开头
     * */
    public boolean checkIdCard(String idNr)
    {
        String reg="^[1-9](\\d{14}|\\d{17})";

        return startCheck(reg,idNr);
    }

    /**
     * 网址验证<br>
     * 符合类型：<br>
     *         http://www.test.com<br>
     *         http://163.com
     * */
    public boolean checkWebSite(String url)
    {
        //http://www.163.com
        String reg="^(http)\\://(\\w+\\.\\w+\\.\\w+|\\w+\\.\\w+)";

        return startCheck(reg,url);
    }
}
